package Serveur;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.Vector;

public class Serveur {
	//////////////////////////////
	//Attributs					//
	//////////////////////////////
	private ListeUtilisateur listeUtilisateur;
	private int numPort;
	private ServerSocket socket_ecoute;
	//////////////////////////////
	//Méthodes publiques		//
	//////////////////////////////
	public static void main(String args[]) {
		int numport;
		if (args.length <= 0)
			numport = 18000; // si pas d'arguments : port 18000 par défaut
		else
			numport = Integer.parseInt(args[0]);// sinon on récupère le numérode port passé en commande
		Serveur serveur = new Serveur(numport);// instance de la classe principale
		new Commandes(serveur);
		serveur.connexion(); // attend les connexions
	}

	public Serveur(int numport) {
		this.numPort = numport;
		this.listeUtilisateur = new ListeUtilisateur(this);
		try {
			this.socket_ecoute = new ServerSocket(numPort);// on ouvre la socket d'écoute sur le numero de port
			System.out.println("Serveur ouvert sur le port "+numport);
		} catch (IOException e) {
			System.out.println("Erreur lors de l'ouverture du serveur");
			System.exit(0);
		}
	}
	
	public Utilisateur unUtilisateur(String id){
		return this.listeUtilisateur.unUtilisateur(id);
	}
	
	public void nouvelUtilisateur(String id,String mdp){
		this.listeUtilisateur.nouvelUtilisateur(id, mdp);
	}

	public  Vector<String> retournerListe(){
		return this.listeUtilisateur.listeConnecte();
	}
	
	  public void afficherListe(){
		  Vector<String> liste = this.listeUtilisateur.listeConnecte();
		  for (int i = 0; i < liste.size(); i++) // parcours de la table des connectés
		    {
		      System.out.println(liste.elementAt(i));
		    }

	  }
	  	  
	//////////////////////////////
	//Méthodes privées			//
	//////////////////////////////
	private void connexion() {
		try {
			while (true) {
				// lorsqu'on accepte une connexion on lance un thread qui va la traiter
				Client cl = new Client(this, socket_ecoute.accept());
				cl.start();
			}
		} catch (IOException e) {
			System.out.println("Erreur lors de l'attente de la connexion");
		}
	}

}
